from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.db import models


class UserManager(BaseUserManager):
    """自定义用户管理器，用于创建用户和超级用户"""

    def create_user(self, username, password=None, **extra_fields):
        if not username:
            raise ValueError("用户名不能为空")
        user = self.model(username=username, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        return self.create_user(username, password, **extra_fields)


class User(AbstractBaseUser, PermissionsMixin):
    """自定义用户模型，替代默认的 auth.User"""

    objects = UserManager()  # 用户管理器

    username = models.CharField(max_length=128, unique=True, verbose_name='用户名')  # 登录名（唯一）
    email = models.EmailField(blank=True, null=True, verbose_name='邮箱')  # 邮箱（可选）
    phone = models.CharField(max_length=11, blank=True, null=True, verbose_name='手机号')  # 手机号（可选）
    nickname = models.CharField(max_length=128, blank=True)  # 昵称/显示名
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True, verbose_name='头像')  # 头像（可选）
    biography = models.TextField(blank=True, null=True, verbose_name='个人简介')  # 简介（可选）
    is_active = models.BooleanField(default=True, verbose_name='是否激活')  # 是否为活跃用户（控制是否可登录）
    is_staff = models.BooleanField(default=False, verbose_name='是否为后台用户')  # 是否有后台权限
    date_joined = models.DateTimeField(auto_now_add=True, verbose_name='注册时间')  # 用户注册时间
    last_updated = models.DateTimeField(auto_now=True, verbose_name='更新时间')  # 用户最后更新时间

    USERNAME_FIELD = 'username'  # 定义登录的字段

    def __str__(self):
        return self.username

    class Meta:
        db_table = 'blog_user'
        verbose_name = "博客用户"
        verbose_name_plural = "博客用户"
